home *** CD-ROM | disk | FTP | other *** search
/ Professional Soft Collection 1.02 / Professional Soft Collection 1.02.iso / qemm.80c / technote.qip / XSTI.TEC < prev    next >
Text File  |  1995-11-04  |  17KB  |  366 lines

  1.  
  2.                     QEMM and the XSTI Parameter
  3.  
  4.  Quarterdeck Technical Note #233              Filename: XSTI.TEC
  5.  by Quarterdeck Testing and Compatibility   CompuServe: XSTI.TEC
  6.  Last revised: 05/01/95                       Category: QEMM
  7.  
  8.  Subject: Detailed information on the use of QEMM's XSTI parameter,
  9.            which can be used when QEMM reports "Disabling Stealth
  10.            ROM because QEMM could not locate the ROM handler for INT
  11.            XX."
  12.  
  13.  Q. Why do I see this message when I start my computer?
  14.  
  15.      QEMM386: Disabling Stealth because QEMM could not locate the
  16.               ROM handler for INT XX"
  17.  
  18.  A. There are three possible causes:
  19.  
  20.      1) You are loading a driver before QEMM which is grabbing
  21.         interrupt XX; OR
  22.  
  23.      2) A ROM is loading a handler for interrupt XX into RAM.
  24.  
  25.      3) You are using a computer which was upgraded to an 80386 with
  26.         an add-in board, such as the Intel "Inboard PC."
  27.  
  28.      There are several potential solutions:
  29.  
  30.      1) Load the driver in question after QEMM.  If it must be
  31.         loaded before QEMM, load HOOKROM.SYS before you load this
  32.         driver.
  33.  
  34.         During installation of QEMM, HOOKROM.SYS is installed in the
  35.         QEMM directory. Assuming that QEMM is installed in a
  36.         directory called QEMM on your "C" drive, the new line would
  37.         look like this:
  38.  
  39.         DEVICE=C:\QEMM\HOOKROM.SYS
  40.  
  41.         HOOKROM is a device driver that may be needed if you use the
  42.         Stealth ROM feature and are loading one of your device
  43.         drivers before QEMM386.SYS in the CONFIG.SYS file.  Though
  44.         it is usually best to load device drivers after QEMM386.SYS,
  45.         there are some special drivers (like the ones that manage
  46.         some 80386 conversion hardware) that must load before
  47.         QEMM386.SYS.  These drivers can obscure information that
  48.         QEMM needs to enable the Stealth ROM feature, in which case
  49.         QEMM386.SYS will post the above error message.
  50.  
  51.         Placed before QEMM386.SYS in the CONFIG.SYS, HOOKROM will
  52.         gather the necessary information for QEMM386.SYS and prevent
  53.         this special driver from interfering with the Stealth ROM
  54.         process.
  55.  
  56.      2) Add the parameter "XSTI=XX" (where "XX" is the number of the
  57.         interrupt reported in the message) to the QEMM386.SYS line
  58.         of the CONFIG.SYS, then add the appropriate eXclude to this
  59.         same line in order to keep QEMM from mapping over the
  60.         portion of the address space where the ROM handler for
  61.         interrupt XX resides.  (See "HOW DO I FIND THE APPROPRIATE
  62.         EXCLUDE?" below.)
  63.  
  64.         It may also be possible to reconfigure your system in such a
  65.         way that the ROM no longer redirects an interrupt into RAM.
  66.         This is the case with the Invisible Network.  (See "KNOWN
  67.         USES FOR XSTI" near the end of this technical bulletin.)  It
  68.         is also possible that a program you are trying to run, or
  69.         even your operating system, wants to have a particular
  70.         interrupt remain unStealthed. XSTI, with the appropriate
  71.         eXclude, is necessary to get your program, or operating
  72.         system, working with Stealth ROM.
  73.  
  74.      3) Add the following parameters to the QEMM device line in your
  75.         CONFIG.SYS file:
  76.  
  77.         XSTI=70 XSTI=74 XSTI=75 XSTI=76
  78.  
  79.         A typical QEMM line would look like this:
  80.  
  81.         DEVICE=C:\QEMM\QEMM386.SYS RAM ST:M XSTI=70 XSTI=74 XSTI=75
  82.          ... XSTI=76
  83.  
  84.         (Note that the preceding two lines should be on a single
  85.         line in CONFIG.SYS.)
  86.  
  87.  Q. How do I find the "appropriate exclude"?
  88.  
  89.  A. First, note that QEMM's Stealth Testing will find automatically
  90.      the majority of circumstances that will require XSTI, and will
  91.      make the appropriate exclusions or S-pages.  If the conflict
  92.      you experience does not happen as part of the boot process.
  93.      You find the appropriate eXclude by excluding all the address
  94.      space occupied by ROMs, using the parameter FSTC, and doing an
  95.      Analysis.  First, locate all your ROMs.  You can do this by
  96.      looking at the First Meg/Overview screen of Manifest.  Those
  97.      with non-Micro Channel machines and VGA video typically have a
  98.      system ROM at F000-FFFF and a video ROM at C000-C7FF.  Those
  99.      with PS/2s or other Micro Channel machines typically have one
  100.      ROM at E000-FFFF.  Add-on devices, such as some disk controller
  101.      cards and network cards, may also have ROMs, which you must
  102.      eXclude as well.
  103.  
  104.      A typical QEMM line for a non-Micro Channel machine is:
  105.  
  106.      DEVICE=C:\QEMM\QEMM386.SYS RAM ST:M XSTI=XX X=F000-FFFF
  107.      ... X=C000-C7FF FSTC
  108.  
  109.      (again, all on one line).
  110.  
  111.      On a PS/2 or most Micro Channel machines, the line will look
  112.      like this:
  113.  
  114.      DEVICE=C:\QEMM\QEMM386.SYS RAM ST:M XSTI=XX X=E000-FFFF FSTC
  115.  
  116.      In the above examples, XX is replaced with the interrupt
  117.      reported in the QEMM error message.
  118.  
  119.      Reboot your computer with this CONFIG.SYS.  Stealth ROM
  120.      should work this time. Use your computer for a while, then
  121.      look at the QEMM/Analysis screen of Manifest.  You will see a
  122.      chart that looks something like this:
  123.  
  124.                       n=0123 4567 89AB CDEF
  125.                    0n00 OOOO OOOO OOOO OOOO
  126.                    1n00 OOOO OOOO OOOO OOOO
  127.                    2n00 OOOO OOOO OOOO OOOO
  128.                    3n00 OOOO OOOO OOOO OOOO
  129.                    4n00 OOOO OOOO OOOO OOOO
  130.                    5n00 OOOO OOOO OOOO OOOO
  131.                    6n00 OOOO OOOO OOOO OOOO
  132.                    7n00 OOOO OOOO OOOO OOOO
  133.                    8n00 OOOO OOOO OOOO OOOO
  134.                    9n00 OOOO OOOO OOOO OOOO
  135.                    An00 OOOO OOOO OOOO OOOO
  136.                    Bn00 OOOO OOOO OOOO OOOO
  137.                    Cn00 IIII IIII OOOO OOOO
  138.                    Dn00 OOOO OOOO OOOO OOOO
  139.                    En00 OOOO OOOO OOOO OOOO
  140.                    Fn00 IIII IIII OOII IIIO
  141.  
  142.      Consulting the ANALYSIS section of your Manifest or QEMM
  143.      manual, you will read that an "I" indicates a portion of the
  144.      address space that HAS NOT been accessed and an "O" indicates a
  145.      portion of the address space that HAS been accessed.  You must
  146.      eXclude that portion of the address space in the eXcluded ROMs
  147.      where you now see "O"s.
  148.  
  149.      In this example (which presumes that the ROMs were located from
  150.      C000-C7FF and F000-FFFF), the appropriate eXclude is
  151.      "X=F800-F9FF", an 8K portion of the address space.  This is the
  152.      portion of the address space where the ROM handler for the
  153.      interrupt XX resides.  Our QEMM line, with appropriate
  154.      excludes, would read as follows:
  155.  
  156.      DEVICE=C:\QEMM\QEMM386.SYS RAM ST:M XSTI=XX X=F800-F9FF
  157.  
  158.      PLEASE NOTE:  The FSTC parameter is used only during this
  159.      analysis process and should be removed afterward.  Because the
  160.      last 64 bytes of the First Meg address space (in FFFC-FFFF) is
  161.      still addressed directly with Stealth ROM, the last 4K piece of
  162.      the QEMM/Analysis screen will always have an "O" in it, whether
  163.      an eXclude is appropriate or not.
  164.  
  165.      ALSO NOTE:  This procedure IS NOT used to find INCLUDES in
  166.      portions of the address space NOT occupied by Stealthed ROMs.
  167.      If you wish to experiment with INCLUDES (in order to gain
  168.      additional High RAM) you must perform a complete analysis as
  169.      described in the ANALYSIS section of the QEMM or Manifest
  170.      manual.
  171.  
  172.  
  173.  Q. What if there are no "O"s?
  174.  
  175.  A. It is possible that there are no "O"s at all:  this is because
  176.      the ROM handler for interrupt XX has been replaced by a new
  177.      interrupt handler and the one in the ROM is not being accessed
  178.      at all.  No eXclude is necessary in this case.
  179.  
  180.  
  181.  Q. What are the known uses for XSTI?
  182.  
  183.  A. There are several known instances of a need for XSTI.  In many
  184.      cases, these parameters will be found automatically by QEMM
  185.  
  186.      INVISIBLE NETWORK:
  187.  
  188.      If you use the boot ROM on the Invisible Network cards, it
  189.      loads 32K of code into the top of the conventional memory
  190.      address space, and grabs interrupt 13. A much better solution
  191.      than to use XSTI=13 and the appropriate eXclude is to disable
  192.      the ROM on the network card and load IS2BIOS instead.  This
  193.      will give you 32K more conventional memory (since IS2BIOS can
  194.      be loaded high), and you will not have the network card's ROM
  195.      breaking up your high address space.
  196.  
  197.  
  198.      MS-DOS 5 ON SOME ZENITH MACHINES:
  199.  
  200.      XSTI=18 and the appropriate eXclude is necessary to print on
  201.      some Zenith machines.  This is due to an obscure method used
  202.      only in some Zenith BIOSes. A Zenith version of DOS 5 may not
  203.      have this problem.
  204.  
  205.  
  206.      WORDSTAR 2000 version 1.01:
  207.  
  208.      XSTI=15 and the appropriate eXclude is necessary.  This is due
  209.      to an ancient method of jumping directly to the code that an
  210.      interrupt vector points to. This version of Wordstar 2000 was
  211.      written in 1985. Newer versions may not have this problem.
  212.  
  213.      VIDEO ACCELERATOR DRIVERS:
  214.  
  215.      SPEED_UP.SYS is a driver that comes with the Orchid Prodesigner
  216.      video card. It makes a copy of the video ROM in RAM in order to
  217.      speed up your video.  If it is loaded after QEMM on a system
  218.      with Stealth ROM enabled, it refuses to load, complaining that
  219.      someone else has taken Interrupt 10.  If loaded before QEMM on
  220.      the same system, Stealth ROM will be disabled because QEMM
  221.      cannot find the ROM handler for Interrupt 10.
  222.  
  223.      You can solve both of these problems with XSTI=10. No exclusion
  224.      is necessary because the video ROM is no longer being used.
  225.      Speed_up.sys can then be loaded after QEMM and (and can be
  226.      loaded into upper memory).  However, we strongly recommend that
  227.      you NOT load SPEED_UP.SYS, RAMBIOS.SYS, FASTBIOS.SYS, or any
  228.      similar driver.  Using SPEED-UP.SYS costs you 36K of memory.
  229.      Instead use QEMM's ROM parameter, producing the SAME effect but
  230.      using NO address space between 0-1024K.
  231.  
  232.  
  233.  Technical Background
  234.  ====================
  235.  
  236.  All you need to know to use the XSTI parameter is contained above.
  237.  If you REALLY want to understand what you are doing, keep reading.
  238.  Otherwise, go sit out on the back porch and watch the sun set.
  239.  
  240.  Q. What does Stealth ROM do to interrupts?
  241.  
  242.  A. The Stealth ROM feature of QEMM allows you to map High RAM over
  243.      ROMs by intercepting the interrupts that point into those ROMs
  244.      and restoring the ROM into the Page Frame when the interrupt
  245.      comes in, allowing the ROM's code to be run from the Page
  246.      Frame.  QEMM must divert all interrupts that point into a ROM
  247.      it Stealths.  Otherwise, when an undiverted interrupt comes in,
  248.      control will pass to whatever QEMM has mapped into the High
  249.      RAM in that portion of address space, rather than to the ROM
  250.      that originally resided there.
  251.  
  252.  Q. In what cases might QEMM not find an interrupt handler?
  253.  
  254.  A. If a program you have loaded before QEMM or a ROM (all ROMs
  255.      load before the CONFIG.SYS) loads an interrupt handler into
  256.      RAM, then, when QEMM loads, QEMM will find this interrupt's
  257.      handler not pointing into a ROM.  An interrupt handler pointing
  258.      into RAM cannot be Stealthed.  If a device driver diverts this
  259.      interrupt, you can load it after QEMM.  If a ROM diverts this
  260.      interrupt into RAM, you should see if there is a way to
  261.      reconfigure the ROM so that it does not.  On the INVISIBLE
  262.      NETWORK, for instance, it is possible to reconfigure the
  263.      network card (by means of a jumper) so that the ROM is no
  264.      longer active and network services are provided by a program.
  265.      In other cases, there may be a configuration program that
  266.      performs this service.
  267.  
  268.      If you cannot reconfigure the ROM to stop diverting this
  269.      interrupt, then QEMM must be told not to try to Stealth this
  270.      interrupt.  This is what XSTI=XX does. Since the new interrupt
  271.      handler may eventually call the ROM's interrupt handler, the
  272.      ROM's interrupt handler for this interrupt may have to be left
  273.      in place. This is done by eXcluding the portion of the address
  274.      space where the ROM's handler for this interrupt resides.  When
  275.      you eXclude a portion of the address space of a ROM that QEMM
  276.      Stealths, the underlying code that was formerly there returns.
  277.  
  278.      You can get an idea where this interrupt is by looking at the
  279.      First Meg/ Interrupts screen of Manifest, as it reports the
  280.      beginning address of this interrupt.  The acid test is to do an
  281.      ANALYSIS with all the ROMs eXcluded, which will report what
  282.      portion of the ROM's address space is being addressed directly.
  283.      Typically, only an 8K eXclude is needed.  If the handler for
  284.      the target interrupt is being replaced entirely by the new
  285.      interrupt handler, then the ROM's interrupt handler is never
  286.      called.  In this case, no eXclude is necessary.  To be sure of
  287.      this, you should still run an Analysis.  (See the ANALYSIS
  288.      section of your Manifest or QEMM manual.)
  289.  
  290.  Q. What if some other program complains about Stealth ROM's
  291.      interrupt diversion?
  292.  
  293.  A. Some programs, when they load, check to see where the interrupt
  294.      handlers they expect to use point.  If an interrupt handler
  295.      they expect to use is not pointing into a ROM, they think that
  296.      an interrupt they wish to manage is already used by another
  297.      program, and incorrectly assume that there is a conflict.  Such
  298.      programs will see Stealthed interrupts pointing into QEMM's
  299.      code, rather than ROM, and may refuse to run.  If such a
  300.      program cannot be configured to ignore QEMM's diversion of the
  301.      interrupt in question, then this interrupt must be XSTIed and
  302.      the appropriate eXclude found, by the means described above.
  303.  
  304.      Some programs make a copy of the video ROM in RAM, and divert
  305.      interrupt 10 (the video interrupt) into this new location for
  306.      the video ROM's code.  Such programs (RAMBIOS.SYS,
  307.      FASTBIOS.SYS, RAPIDBIO.SYS are some examples) may refuse to
  308.      load if interrupt 10 has been diverted.  The best solution to
  309.      this problem is to instead use QEMM's ROM= parameter, which
  310.      instructs QEMM to perform this same service without using any
  311.      addresses in the first megabyte of address space. If you wish
  312.      to use such a program anyway, and it has the above complaint,
  313.      then you must use XSTI=10.  No eXclude is necessary, because
  314.      such drivers usurp the video ROM entirely and INT 10 is never
  315.      called again.
  316.  
  317.  Q. What is FSTC?
  318.  
  319.  A. The purpose of the FSTC parameter is to make the ANALYSIS
  320.      procedure accurate. When QEMM Stealths a ROM, certain tables
  321.      have to be stored by QEMM in its own data area.  For a video
  322.      ROM, this table occupies 12K; for a disk ROM, this table
  323.      occupies 0.1K (If you have no explicit disk ROM, this table is
  324.      in the system ROM.)   When a ROM is being Stealthed, but the
  325.      address in which the ROM resides is eXcluded, as with
  326.      X=C000-C7FF, then QEMM won't need to make copies of these
  327.      tables in its own data area.  QEMM will automatically save
  328.      memory by NOT making copies of the tables.  This means that
  329.      when you do eXclude the portion(s) of the ROM where these
  330.      tables are stored, the ROM will be accessed directly.  (This
  331.      only holds true when you have used an eXclude.) This will cause
  332.      Analysis to report that a portion of the address space is OK
  333.      (when eXcluded) even though it would not be accessed directly
  334.      were it not eXcluded.
  335.  
  336.      FSTC (FORCESTEALTHTABLECOPY) forces QEMM to make copies of
  337.      these tables so that inappropriate eXcludes are not recommended
  338.      for the above reason.  FSTC should only be used when you are
  339.      testing a portion of a ROM's address space for direct access by
  340.      eXcluding the whole ROM.  It is not an appropriate parameter
  341.      for a final configuration.
  342.  
  343.  
  344.  Summary
  345.  =======
  346.  
  347.  The XSTI parameter is rarely needed.  If you are loading any
  348.  driver OTHER THAN QEMM 7.0's DOSDATA.SYS before QEMM in your
  349.  CONFIG.SYS file, move QEMM above this driver.  This step alone may
  350.  solve the problem without the use of XSTI.
  351.  
  352.  If you decide to use XSTI, you MUST determine the appropriate
  353.  eXclude that will return the ROM code for handling the XSTIed
  354.  interrupt to the address space it formerly occupied, because QEMM
  355.  will no longer restore the ROM's code for the interrupt to the
  356.  Page Frame and divert the interrupt there when it comes in.
  357.  
  358.  ******************************************************************
  359.  *      Trademarks are property of their respective owners.       *
  360.  *   This and other technical notes may be available in updated   *
  361.  *     forms through Quarterdeck's standard support channels.     *
  362.  *          Copyright (C) 1995 Quarterdeck Corporation            *
  363.  ******************** E N D   O F   F I L E ***********************
  364.  
  365.  
  366.